package com.linser.gistools;
import com.linser.gistools.utils.GlobalVariables;
import javafx.application.Application;

import javafx.application.Platform;
import javafx.fxml.FXMLLoader;

import javafx.scene.Scene;
import javafx.scene.image.Image;

import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.io.IOException;
import java.io.InputStream;

import java.util.Objects;
import java.util.Properties;

public class MainApplication extends Application {
    private Stage mainStage;
    @Override
    public void start(Stage stage) throws IOException {
        this.mainStage = stage;
        // 设置应用程序使用 MODENA 主题
        setUserAgentStylesheet(STYLESHEET_MODENA);
        String packageName = getClass().getPackage().getName().replace(".", "/");
        GlobalVariables.mainPackageName = packageName;
        Image logoIcon = new Image(Objects.requireNonNull(getClass().getResourceAsStream(String.join("", "/", packageName, "/image/logo.png"))));
        GlobalVariables.logoIcon = logoIcon;
        stage.getIcons().add(logoIcon);
        this.initCommonConfig();
        this.initStageEvent();
        //初始化预加载数据
        GlobalVariables.initPreLoadData();
        FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("fxml/main.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 1020, 600);
        stage.setTitle("Gistools!");
        //设置无装饰模式，也就是没头部的关闭最大最小化难捱
        //stage.initStyle(StageStyle.UNDECORATED);
        //设置默认模式，有关闭最大最小化难捱
        stage.initStyle(StageStyle.DECORATED);
        stage.setResizable(true);
        stage.setScene(scene);
        stage.show();
    }

    public void stop() {
        // 关闭阶段：执行清理工作或退出应用程序的操作
        System.exit(0);//此处代码是实在清理不掉时调用的方法，暂时找不到销毁swing组件的方法，只能在此处销毁
    }

    public static void main(String[] args) {
        launch();
    }
    private void initCommonConfig(){
        Properties properties = new Properties();
        try {
            // 加载配置文件
            InputStream input = getClass().getResourceAsStream(String.join("", "/", GlobalVariables.mainPackageName, "/config/commonConfig.properties"));
            properties.load(input);
            GlobalVariables.commonConfigProperties = properties;
            // 读取配置项
            String charset = properties.getProperty("charset");
            // 打印配置项
            System.out.println("charset: " + charset);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private void initStageEvent(){
        // 最大化按钮监听，点击最大化时全屏
        this.mainStage.maximizedProperty().addListener((prop, oldVal, newVal) -> Platform.runLater(()->{
            //窗体大小改变时 SwingNode 不会自动更新渲染，需要手动执行
            GlobalVariables.jMapPane.repaint();
        }));
    }
}